/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.dao.implementaciones;

import desarrollosoft.ghce.dao.interfaces.IPrestacionDAO;
import desarrollosoft.ghce.entidades.Prestacion;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author ariel
 */
@Repository("prestacionDAO")
public class PrestacionDAO implements IPrestacionDAO {

    @PersistenceContext
    EntityManager entityManager;
    
    @Override
    public List<Prestacion> buscarPrestaciones(String nombre) {
        Query query = entityManager.createQuery("SELECT c FROM Prestacion c WHERE c.nombre LIKE CONCAT ('%',:nombre,'%')"
                + " ORDER BY c.nombre ASC");
        query.setParameter("nombre", nombre);
        query.setMaxResults(50);
        return query.getResultList();
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void eliminarPrestacion(Prestacion cirugia) {
        entityManager.remove( entityManager.merge(cirugia) );
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void modificarPrestacion(Prestacion cirugia) {
        entityManager.merge(cirugia);
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void crearPrestacion(Prestacion cirugia) {
        entityManager.persist(cirugia);
    }

    @Override
    public boolean existePrestacionConNombre(String nombreMayusculas) {
        Query consulta = entityManager.createQuery(
                "SELECT c FROM Prestacion c WHERE UPPER(c.nombre) = :nombreMayuscuas"
        );
        consulta.setParameter("nombreMayuscuas", nombreMayusculas);
        List<Prestacion> lista = consulta.getResultList();
        if (lista.isEmpty()) {
            return false;
        }
        return true;
    }

    @Override
    public boolean existePrestacionConNombreYdiferenteId(Long id, String nombreMayusculas) {
        Query consulta = entityManager.createQuery(
                "SELECT c FROM Prestacion c WHERE UPPER(c.nombre) = :nombreMayuscuas "
                        + "AND c.id != :id"
        );
        consulta.setParameter("nombreMayuscuas", nombreMayusculas);
        consulta.setParameter("id", id);
        List<Prestacion> lista = consulta.getResultList();
        if (lista.isEmpty()) {
            return false;
        }
        return true;
    }

    @Override
    public List<Prestacion> buscarTodasPrestaciones() {
        Query query = entityManager.createQuery("SELECT c FROM Prestacion c"
                + " ORDER BY c.nombre ASC");
        query.setMaxResults(50);
        return query.getResultList();
    }
    
}
